<?php
/**
 * 审核系统随机用户名生成器
 * 提供多种风格的随机用户名生成方式，适合审核系统用户账号创建使用
 */
class RandomUsernameGenerator {
    // 常用姓氏
    private static $lastNames = [
        '张', '王', '李', '赵', '刘', '陈', '杨', '黄', '周', '吴',
        '徐', '孙', '胡', '朱', '高', '林', '何', '郭', '马', '罗',
        '梁', '宋', '郑', '谢', '韩', '唐', '冯', '于', '董', '萧'
    ];
    
    // 常用名字（单字）
    private static $firstNamesSingle = [
        '伟', '芳', '娜', '秀英', '敏', '静', '强', '磊', '军', '洋',
        '勇', '艳', '杰', '涛', '明', '超', '秀兰', '霞', '平', '刚'
    ];
    
    // 常用名字（双字）
    private static $firstNamesDouble = [
        '建国', '建华', '建军', '红梅', '婷婷', '晶', '宇', '鹏飞', 
        '子轩', '雨桐', '浩然', '欣怡', '梓涵', '晨曦', '雨辰'
    ];
    
    // 形容词
    private static $adjectives = [
        '睿智', '公正', '明察', '洞察', '客观', '理性', '严谨', 
        '细致', '审慎', '精准', '敏锐', '明智', '冷静', '果断'
    ];
    
    // 审核相关词汇
    private static $auditTerms = [
        '审核', '审查', '核查', '核验', '评审', '稽查', '督查', 
        '校验', '复核', '验证'
    ];
    
    // 字母表（用于生成英文风格用户名）
    private static $letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    
    /**
     * 生成随机用户名
     * @param string $style 生成风格：chinese(中文姓名)、audit(审核专用)、mix(混合)、english(英文)、number(数字)
     * @param int $length 长度限制（部分风格有效）
     * @return string 生成的用户名
     */
    public static function generate($style = 'chinese', $length = 8) {
        switch ($style) {
            case 'chinese':
                return self::generateChineseName();
            case 'audit':
                return self::generateAuditRelated();
            case 'mix':
                return self::generateMixed($length);
            case 'english':
                return self::generateEnglish($length);
            case 'number':
                return self::generateNumber($length);
            default:
                return self::generateChineseName();
        }
    }
    
    /**
     * 生成中文姓名风格用户名
     * @return string 中文用户名
     */
    private static function generateChineseName() {
        // 随机选择姓氏
        $lastName = self::$lastNames[array_rand(self::$lastNames)];
        
        // 50%概率选择单字名，50%选择双字名
        if (mt_rand(0, 1)) {
            $firstName = self::$firstNamesSingle[array_rand(self::$firstNamesSingle)];
        } else {
            $firstName = self::$firstNamesDouble[array_rand(self::$firstNamesDouble)];
        }
        
        // 加上随机数字后缀，避免重复
        $suffix = mt_rand(10, 99);
        
        return $lastName . $firstName . $suffix;
    }
    
    /**
     * 生成审核系统专用风格用户名
     * @return string 审核专用用户名
     */
    private static function generateAuditRelated() {
        $adjective = self::$adjectives[array_rand(self::$adjectives)];
        $term = self::$auditTerms[array_rand(self::$auditTerms)];
        $number = mt_rand(100, 999);
        
        return $adjective . $term . $number;
    }
    
    /**
     * 生成混合风格用户名（字母+数字）
     * @param int $length 长度
     * @return string 混合风格用户名
     */
    private static function generateMixed($length = 8) {
        $username = '';
        $chars = self::$letters . '0123456789';
        $charLength = strlen($chars);
        
        for ($i = 0; $i < $length; $i++) {
            $username .= $chars[mt_rand(0, $charLength - 1)];
        }
        
        return $username;
    }
    
    /**
     * 生成英文风格用户名
     * @param int $length 长度
     * @return string 英文用户名
     */
    private static function generateEnglish($length = 8) {
        $username = '';
        $lettersLength = strlen(self::$letters);
        
        for ($i = 0; $i < $length; $i++) {
            $username .= self::$letters[mt_rand(0, $lettersLength - 1)];
        }
        
        return $username;
    }
    
    /**
     * 生成数字风格用户名
     * @param int $length 长度
     * @return string 数字用户名
     */
    private static function generateNumber($length = 8) {
        $username = '';
        $numbers = '0123456789';
        $numbersLength = strlen($numbers);
        
        // 确保第一位不是0
        $username .= $numbers[mt_rand(1, $numbersLength - 1)];
        
        for ($i = 1; $i < $length; $i++) {
            $username .= $numbers[mt_rand(0, $numbersLength - 1)];
        }
        
        return $username;
    }
    
    /**
     * 批量生成随机用户名
     * @param int $count 生成数量
     * @param string $style 生成风格
     * @param int $length 长度限制
     * @return array 用户名数组
     */
    public static function generateBatch($count = 10, $style = 'chinese', $length = 8) {
        $usernames = [];
        
        for ($i = 0; $i < $count; $i++) {
            // 确保生成不重复的用户名
            do {
                $username = self::generate($style, $length);
            } while (in_array($username, $usernames));
            
            $usernames[] = $username;
        }
        
        return $usernames;
    }
}